Applications for one-dimensional (1-D) bar codes are well known and widespread. Techniques for encoding and decoding such codes are well known and may be accomplished relatively simply. Typically, there is a very limited need for inclusion of code management instruction or "overhead" data necessary to manage aspects of the decoding process. While only a limited total amount of data may be encoded in a 1-D bar code, the format is quite robust and in reading a printed bar code an adequate range of scan angles can be employed. Thus, if the 1-D bar code has a width in a horizontal direction, the maximum scan angle (relative to the horizontal direction) at which all bar code elements are traversed will depend upon the height of the bar code elements. For a reasonable aspect ratio (ratio of width to height), a diagonal scan across the bar code will traverse all of the elements for angles typically up to plus or minus 30 degrees from the horizontal.
Various forms of two-dimensional (2-D) bar codes are also known. Such codes typically provide significantly increased data storage capacity, with accompanying increases in complexity of encoding and complexity of decoding, requirements for a large increase in necessary overhead data, and severe reduction of the scan angle range usable without production of partial scans. The increased overhead data requirements relate to identifying the content of the 2-D code so as to enable reliable decoding, as well as to other aspects of decoding.
The reduction in usable scan angle range may result partially from the use of bar elements with less height to reduce the overall size of a 2-D bar code. Primarily, however, when a large number of individual bar elements are placed in series the length of the row of code elements gets much longer, so that, unless the height of each element is proportionally increased, the aspect ratio of the line of bar elements becomes much larger. A larger aspect ratio accommodates only a diagonal scan at a small angle from horizontal, if partial scans are to be avoided by always scanning all elements in decoding a line of elements. As an alternative, a larger range of acceptable scan angles may be achieved by accepting partial scans of a line of elements and stitching the partial scans together to provide the full scans required for successful decoding of the bar code. However, reliable stitching together of partial scans requires sophisticated decoding circuitry and the inclusion of significantly more overhead data in order to provide enough information to enable identification and successful stitching of the appropriate partial scans in order to form a complete scan of each row of bar elements in the 2-D bar code.
Objects of the present invention are, therefore, to provide new forms of packet codes, and methods and arrangements for encoding and decoding such code forms, which enable provision of machine readable images characterized by one or more of the following:
large data capacity with relatively low overhead data requirements; PA1 a configuration consisting of a plurality of small self-addressed portions, or "packets" which can be read individually in any order; PA1 flexibility of data arrangement in consecutive or non-consecutive order; PA1 flexibility in arrangement and configuration in non-rectangular or other shapes; PA1 a relatively large scan angle range determined by individual packet aspect ratio, independently of the overall row length or aspect ratio of rows of the complete machine readable image; and PA1 simplified decoding and code reader requirements. PA1 (a) parceling the sequence of data into a number of data units; PA1 (b) forming a plurality of address/data packets, each including a data portion representative of one of the data units and an address portion identifying the position of the data unit relative to the sequence of data to enable reassembly of data units into proper positions in the sequence of data independently of the order in which the address/data packets are read and decoded; PA1 (c) forming at least one instruction packet including a data portion representative of information as to at least one of (i) the total number of address/data packets included in the packet code, (ii) an error correction protocol, and (iii) a data compression protocol; and PA1 (d) positioning the address/data packets in a configuration characterized by inclusion of at least one of the following, at least two packets in a row extending in a first direction, and at least two packets in a column extending in a second direction nominally normal to the first direction. PA1 (a) generating a signal representative of an address/data packet; PA1 (b) decoding the step (a) signal to recover a data unit and its address; PA1 (c) storing the data unit in a manner enabling identification of its position in the sequence of data; PA1 (d) determining the total number of address/data packets included in the complete packet code; PA1 (e) repeating steps (a), (b) and (c) for other address/data packets; PA1 (f) verifying that enough address/data packets have been decoded and stored; PA1 (g) utilizing error correction to recover missing packets, if appropriate; and PA1 (h) providing an output signal representative of a selected part of the sequence of data as represented by recovered data units.